package util

import (
	"fmt"
	"github.com/xuri/excelize/v2"
	"log"
)

func PrintSheet(excelFile *excelize.File, sheetName string) {

	rows, err := excelFile.GetRows(sheetName)
	cols, err := excelFile.GetCols(sheetName)
	println("cols", cols)

	if err != nil {
		// 处理错误，例如记录错误信息或终止程序
		log.Fatalf("获取表格行数据时出错: %v", err)
	}

	fmt.Println("打印表格数据：")
	for rowIdx := range rows {
		rowNum := rowIdx + 1
		for colIdx := range rows[rowIdx] {
			colNum := colIdx + 1
			fmt.Printf("第%v行 第%v列\n", rowNum, colNum)

			// 坐标转单元格名（先列后行）
			cellName, _ := excelize.CoordinatesToCellName(colNum, rowNum)
			cellValue, _ := excelFile.GetCellValue(sheetName, cellName)

			fmt.Printf("%v: %v\n", cellName, cellValue)
		}
	}

}

/*
应用样式至表格，并覆盖默认样式。
返回样式ID
*/
func ApplyNewStyle(excelFile *excelize.File, sheetName string, defaultStyle excelize.Style) int {
	styleId, _ := excelFile.NewStyle(&defaultStyle)
	ApplyByStyleId(excelFile, sheetName, styleId)
	return styleId
}

func ApplyByStyleId(excelFile *excelize.File, sheetName string, defaultStyleId int) {

	rows, err := excelFile.GetRows(sheetName)

	if err != nil {
		// 处理错误，例如记录错误信息或终止程序
		log.Fatalf("获取表格行数据时出错: %v", err)
	}

	if len(rows) == 0 || len(rows[0]) == 0 {
		println("空表格")
		return
	}

	maxRowNum := len(rows)
	maxColNum := len(rows[0])

	// 打印最大行列
	logger := log.Default()
	logger.Println("maxRowNum", maxRowNum, "maxColNum", maxColNum)

	// excel索引以1开始
	topLeftCellName, _ := excelize.CoordinatesToCellName(1, 1)
	btmRightCellName, _ := excelize.CoordinatesToCellName(maxColNum, maxRowNum)

	excelFile.SetCellStyle(sheetName, topLeftCellName, btmRightCellName, defaultStyleId)

}
